/**
 * <p>版权所有：中企动力
 * <p>未经本公司许可，不得以任何方式复制或使用本程序任何部分
 */
package com.ce.pms.house.service;

import java.util.List;

import com.ce.pms.base.service.IPmsBaseService;
import com.ce.pms.house.model.CoWorkerDomain;
import com.ce.pms.house.model.Environment;
import com.ce.pms.house.model.Layout;
import com.ce.pms.house.model.ProjectDomain;
import com.ce.pms.house.vo.CoWorkerVO;
import com.ce.pms.house.vo.EnvironmentVO;
import com.ce.pms.house.vo.LayoutVO;
import com.ce.pms.house.vo.ProjectVO;
import com.sitechasia.webx.core.support.Page;

/**
 * 功能描述: IProjectService 期数服务类
 *
 * @author  付湘辉
 * Created on：  2008-6-25
 * @author  付湘辉
 * update on：  2008-6-25
 */

public interface IProjectService extends IPmsBaseService {
	 /**
	 * 方法描述: 根据environment装配EnvironmentVO
	 *
	 * @author 胡煦 Create on:2008-6-27
	 * @param o
	 * @return ProjectVO Edit author:
	 * @roseuid 48479B9B0119 修改原因：
	 */

	public EnvironmentVO assembleD2V(Environment environment) ;
	/**
	 * 功能描述:根据指定期的名字查询记录数<br>
	 * 注：新建判断name的唯一性时，projectId为null；修改判断name的唯一性时，则需要传入projectId<br>
	 * @param projectName
	 * @param projectId
	 * @return
	 * Create author:胡煦
	 * Create on:2008-7-14
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public Long checkProjectName(String projectName,String projectId);

	/**
	 * 功能描述:根据指定的建设规划的土地宗号查询记录数<br>
	 * 注：新建判断name的唯一性时，layoutId为null；修改判断name的唯一性时，则需要传入layoutId<br>
	 * @param layoutName
	 * @param projectId
	 * @param layoutId
	 * @return
	 * Create author:胡煦
	 * Create on:2008-7-14
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public Long checkLayoutName(String layoutName,Long projectId, Long layoutId);

	/**
	 * 功能描述:根据指定配套设施名字查询记录数<br>
	 * 注：新建判断name的唯一性时，environmentId为null；修改判断name的唯一性时，则需要传入environmentId<br>
	 * @param environmentName
	 * @param projectId
	 * @param environmentId
	 * @return
	 * Create author:胡煦
	 * Create on:2008-7-14
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public Long checkEnvironmentName(String environmentName,Long projectId,Long environmentId);
   /**
    * 算法描述:
    * 1. 根据ProjectVO基本信息(名称)创建ProjectDomain实例.
    * 2. 调用DAO保存ProjectDomain实例.
    * 3. 根据更新返回的ProjectDomain实例装配ProjectVO
    * @param o
    * @return ProjectVO
    * @roseuid 484799CF0399
    */
   public ProjectVO addBase(ProjectVO o);
   /**
	 * 方法描述: 删除期数并解除其下关系
	 *
	 * @author 胡煦 Create on:2008-7-7
	 * @param
	 * @return Edit author: Edit on: 修改原因：
	 */
  public void deleteProject(Long id);
   /**
	 * 方法描述: Vo to Do
	 * @author 胡煦
	 * Create on:2008-6-26
	 * @param LayoutVO
	 * @return Layout
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
  public Environment assembleV2D(EnvironmentVO environmentVO);
   /**
    * 算法描述:
    * 1. 根据ProjectVO中的ProjectId查询ProjectDomain实例.
    * 2. 根据ProjectVO中基本信息(名称)设置/覆盖前面检索到的
    * ProjectDomain实例.
    * 3. 调用DAO更新ProjectDomain实例.
    * 4. 根据更新返回的ProjectDomain实例装配ProjectVO
    * @param o
    * @return ProjectVO
    * @roseuid 484799FD0109
    */
   public ProjectVO editBase(ProjectVO o);
   /**
	 * 方法描述: Vo to Do
	 * @author 胡煦
	 * Create on:2008-6-26
	 * @param LayoutVO
	 * @return Layout
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public Layout assembleV2D(LayoutVO layoutVO);
	/**
	 * 方法描述: Do to Vo
	 * @author 胡煦
	 * Create on:2008-6-26
	 * @param Layout
	 * @return LayoutVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public LayoutVO assembleD2V(Layout layout);
   /**
    * 方法描述: 根据ProjectDomain装配ProjectVO
    * @author 胡煦
    * Create on:2008-6-27
    * @param o
    * @return ProjectVO
    * Edit author:
    * @roseuid 48479B9B0119
    * 修改原因：
    */


     public ProjectVO assembleD2V(ProjectDomain o);
   /**
    * 方法描述: 根据CoWorkerDomain装配CoWorkerVO
    * @author 胡煦
    * Create on:2008-6-27
    * @param o
    * @return ProjectVO
    * Edit author:
    * @roseuid 48479B9B0119
    * 修改原因：
    */


      public CoWorkerVO assembleD2V(CoWorkerDomain c);
   /**
    * 算法描述:
    * 1. 根据ProjectVO中的ProjectId查询ProjectDomain实例.
    * 2. 根据ProjectVO中建设规划信息设置/覆盖前面检索到的
    * ProjectDomain实例.
    * 3. 调用DAO更新ProjectDomain实例.
    * 4. 根据更新返回的ProjectDomain实例装配ProjectVO
    * @param o
    * @return ProjectVO
    * @roseuid 48479A050128
    */

   public LayoutVO addLayout(LayoutVO o);

   /**
    * 算法描述:
    * 1. 根据ProjectVO中的ProjectId查询ProjectDomain实例.
    * 2. 根据ProjectVO中建设规划信息设置/覆盖前面检索到的
    * ProjectDomain实例.
    * 3. 调用DAO更新ProjectDomain实例.
    * 4. 根据更新返回的ProjectDomain实例装配ProjectVO
    * @param o
    * @return ProjectVO
    * @roseuid 48479A120213
    */
   public LayoutVO editLayout(LayoutVO o);

   /**
    * 算法描述:
    * 1. 根据ProjectVO创建QueryCondition实例,封装查询条件.
    * 2. 访问数据库检索ProjectDomain实体
    * 3. 根据检索结果装配List<ProjectVO>
    * @param o
    * @param pageNo
    * @param pageSize
    * @return Page
    * @roseuid 48479A190186
    */
   public Page queryProjects(ProjectVO o, int pageNo, int pageSize);

   /**
    * 算法描述:
    * 1. 根据ProjectVO中的ProjectId查询ProjectDomain   实例.
    * 2. 将ProjectVO中Set<Environment>含有的(含有,仅
    * 含有)新增Environment实例)add到前面检索到的
    * ProjectDomain实例的Set<Environment>中.
    * 3. 调用DAO更新ProjectDomain实例.
    * 4. 根据更新返回的ProjectDomain实例装配ProjectVO
    * @param o
    * @return ProjectVO
    * @roseuid 48479AAE0271
    */
   public EnvironmentVO addEnvironment(EnvironmentVO o);

   /**
    * 算法描述:
    * 1. 根据ProjectVO中的ProjectId查询ProjectDomain     实例.
    * 2. 将ProjectVO中Set<Environment>含有的(含有,仅
    * 含有)修改过的Environment实例)替换前面检索到
    * 的ProjectDomain实例Set<Environment>中的对应   旧实例.
    * 3. 调用DAO更新ProjectDomain实例.
    * 4. 根据更新返回的Proje
    * @param o
    * @return ProjectVO
    * @roseuid 48479AB801D4
    */
   public EnvironmentVO editEnvironment(EnvironmentVO o);

   /**
    * 算法描述:
    * 1. 根据ProjectVO中的ProjectId查询ProjectDomain     实例.
    * 2. 根据ProjectVO中Set<Environment>含有的(含有,
    * 仅含有)要删除的Environment实例Id,删除掉前面
    * 检索到的ProjectDomain实例的Set<Environment>   中对应的原实例.
    * 3. 调用DAO更新ProjectDomain实例.
    * 4. 根据更新返回的Proje
    * @param o
    * @return ProjectVO
    * @roseuid 48479AC7000F
    */
   public EnvironmentVO deleteEnvironment(EnvironmentVO o);

   /**
    * 算法描述:
    * 1. 根据ProjectVO中的ProjectId查询ProjectDomain实例.
    * 2. 删除ProjectDomain中relationOrgs的元素.
    * 2. 将ProjectVO中   buildCorps,developers,designCorps,
    *    surveillants中的元素添加到前面检索到的
    * ProjectDomain实例的relationOrgs中.
    * 3. 调用DAO更新ProjectDomain实例.
    * 4. 根据更新返回的ProjectDomain实例装配ProjectVO
    * @param o
    * @return ProjectVO
    * @roseuid 48479AD402FD
    */
   public ProjectVO addJoinCorps(ProjectVO o);

   /**
    * 算法描述:
    * 1. 根据ProjectVO中的ProjectId查询ProjectDomain实例.
    * 2. 删除ProjectDomain中relationOrgs的元素.
    * 2. 将ProjectVO中   buildCorps,developers,designCorps,
    *    surveillants中的元素添加到前面检索到的
    * ProjectDomain实例的relationOrgs中.
    * 3. 调用DAO更新ProjectDomain实例.
    * 4. 根据更新返回的ProjectDomain实例装配ProjectVO
    * @param o
    * @return ProjectVO
    * @roseuid 48479AE601D4
    */
   public ProjectVO editBuildingOrg(ProjectVO o);
   /**
    * 方法描述: 删除参建单位，只解除关系
    * @author 胡煦
    * Create on:2008-7-7
    * @param
    * @return
    * Edit author:
    * Edit on:
    * 修改原因：
    */
   public ProjectVO deleteJoinCorps(ProjectVO projectVO,Long coWorkerId);
   /**
    * 根据projectId返回ProjectVO
    * @param id
    * @return ProjectVO
    * @roseuid 484892AF009C
    */
   public ProjectVO findProjectById(Long id);

   /**
	 *
	 * 功能描述: 根据楼盘id得到期数列表
	 *
	 * @author 付湘辉
	 * Created on:2008-7-8
	 *
	 * 修改原因：
	 * @param areaId
	 * @return List<ProjectVO> 返回结果
	 */
	public List<ProjectVO> getProjectVoListByAreaId(Long areaId);
}
